增加家庭成员,

FFIB 2 years ago
parent
commit
4342ed8d0b

+ 1 - 1
account/models.py

@@ -52,7 +52,7 @@ class UserInfo(BaseModelMixin):
52 52
     @property
53 53
     def data(self):
54 54
         try:
55
-            user = IsolationPointUserInfo.objects.get(user_id=self.user_id, status=True).userdata
55
+            user = IsolationPointUserInfo.objects.get(user_id=self.user_id, member_id='', status=True).userdata
56 56
         except IsolationPointUserInfo.DoesNotExist:
57 57
             user = {}
58 58
 

+ 5 - 5
api/antigen_views.py

@@ -18,17 +18,17 @@ def upload_antigen(request):
18 18
     detect_at = tc.string_to_datetime(detect_at, format='%Y-%m-%d %H:%M:%S')
19 19
 
20 20
     try:
21
-        user = IsolationPointUserInfo.objects.get(fields__icontains=phone, status=True)
21
+        user = IsolationPointUserInfo.objects.get(fields__icontains=phone, member_id='', status=True)
22
+        user.detect_at = detect_at
23
+        user.antigen_result = result
24
+        user.save()
22 25
     except IsolationPointUserInfo.DoesNotExist:
23 26
         user = None
24 27
 
25
-    user.detect_at = detect_at
26
-    user.antigen_result = result
27
-    user.save()
28
-
29 28
     AntigenMeasureLogInfo.objects.create(
30 29
         point_id=user.point_id if user else '',
31 30
         user_id=user.user_id if user else '',
31
+        member_id=user.member_id if user else '',
32 32
         macid=macid,
33 33
         user_name=user_name,
34 34
         phone=phone,

+ 45 - 0
api/family_member_views.py

@@ -0,0 +1,45 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from __future__ import division
4
+
5
+from django_logit import logit
6
+from django.conf import settings
7
+from django_response import response
8
+
9
+from equipment.models import FamilyMemberInfo
10
+
11
+
12
+@logit
13
+def mp_bind_family_member(request):
14
+    user_id = request.POST.get('user_id', '')
15
+    identity_card_name = request.POST.get('identity_card_name', '')
16
+    identity_card_number = request.POST.get('identity_card_number', '')
17
+    relation = request.POST.get('relation', '')
18
+
19
+    FamilyMemberInfo.objects.create(
20
+        user_id=user_id,
21
+        identity_card_name=identity_card_name,
22
+        identity_card_number=identity_card_number,
23
+        relation=relation
24
+    )
25
+    
26
+    return response()
27
+
28
+@logit
29
+def mp_family_member_list(request):
30
+    user_id = request.POST.get('user_id', '')
31
+    members = FamilyMemberInfo.objects.filter(user_id=user_id, status=True)
32
+
33
+    members = [member.data for member in members]
34
+    return response(data={
35
+        'members': members
36
+    })
37
+
38
+@logit
39
+def mp_delete_family_member(request):
40
+    user_id = request.POST.get('user_id', '')
41
+    member_id = request.POST.get('member_id', '')
42
+
43
+    FamilyMemberInfo.objects.filter(user_id=user_id, member_id=member_id).update(status=False)
44
+
45
+    return response()

+ 19 - 11
api/point_views.py

@@ -55,6 +55,7 @@ def update_point_info(request):
55 55
 def get_point_fields(request):
56 56
     point_id = request.POST.get('point_id', '')
57 57
     user_id = request.POST.get('user_id', '')
58
+    member_id = request.POST.get('member_id', '')
58 59
 
59 60
     try:
60 61
         point = IsolationPointInfo.objects.get(point_id=point_id, status=True)
@@ -62,7 +63,7 @@ def get_point_fields(request):
62 63
         return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
63 64
 
64 65
     try:
65
-        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, point_id=point_id)
66
+        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, point_id=point_id)
66 67
     except IsolationPointUserInfo.DoesNotExist:
67 68
         ipui = None
68 69
 
@@ -77,11 +78,12 @@ def get_point_fields(request):
77 78
 def save_point_fields(request):
78 79
     point_id = request.POST.get('point_id', '')
79 80
     user_id = request.POST.get('user_id', '')
81
+    member_id = request.POST.get('member_id', '')
80 82
     fields = get_query_value(request, 'fields', val_cast_type='listjson')
81 83
 
82
-    IsolationPointUserInfo.objects.exclude(point_id=point_id).update(status=False)
84
+    IsolationPointUserInfo.objects.filter(user_id=user_id, member_id=member_id).exclude(point_id=point_id).update(status=False)
83 85
 
84
-    IsolationPointUserInfo.objects.update_or_create(point_id=point_id, user_id=user_id, defaults={
86
+    IsolationPointUserInfo.objects.update_or_create(point_id=point_id, user_id=user_id, member_id=member_id, defaults={
85 87
         'fields': fields,
86 88
         'status': True,
87 89
     })
@@ -93,9 +95,10 @@ def save_point_fields(request):
93 95
 def bind_eqpt(request):
94 96
     macid = request.POST.get('macid', '')
95 97
     user_id = request.POST.get('user_id', '')
98
+    member_id = request.POST.get('member_id', '')
96 99
 
97 100
     try:
98
-        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
101
+        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True)
99 102
     except IsolationPointUserInfo.DoesNotExist:
100 103
         return response(IsolationPointStatusCode.ISOLATIONPOINT_USER_NOT_FOUND)
101 104
 
@@ -122,6 +125,7 @@ def bind_eqpt(request):
122 125
 def mp_upload_temperature(request):
123 126
     macid = request.POST.get('macid', '')
124 127
     userid = request.POST.get('user_id', '')
128
+    member_id = request.POST.get('member_id', '')
125 129
     temperature = request.POST.get('temperature', '')
126 130
     dry_cough_status = request.POST.get('dry_cough_status', False)
127 131
     weak_status = request.POST.get('weak_status', False)
@@ -132,13 +136,13 @@ def mp_upload_temperature(request):
132 136
     is_filled = request.POST.get('is_filled', False)
133 137
 
134 138
     try:
135
-        ipui = IsolationPointUserInfo.objects.get(user_id=userid, status=True)
139
+        ipui = IsolationPointUserInfo.objects.get(user_id=userid, member_id=member_id, status=True)
136 140
     except IsolationPointUserInfo.DoesNotExist:
137
-        ThermometerMeasureLogInfo.objects.create(point_id='', macid=macid, user_id=userid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status,
141
+        ThermometerMeasureLogInfo.objects.create(point_id='', macid=macid, user_id=userid, member_id=member_id, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status,
138 142
         blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled)
139 143
         return response()
140 144
 
141
-    ThermometerMeasureLogInfo.objects.create(point_id=ipui.point_id, macid=macid, user_id=userid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled)
145
+    ThermometerMeasureLogInfo.objects.create(point_id=ipui.point_id, macid=macid, user_id=userid, member_id=member_id,temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled)
142 146
 
143 147
     ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')]))
144 148
     ipui.observed_days = len(ipui.observed_ymds)
@@ -159,11 +163,12 @@ def mp_upload_temperature(request):
159 163
 @logit
160 164
 def mp_temperature_list(request):
161 165
     user_id = request.POST.get('user_id', '')
166
+    member_id = request.POST.get('member_id', '')
162 167
     point_id = request.POST.get('point_id', '')
163 168
     page = request.POST.get('page', 1)
164 169
     num = request.POST.get('num', 20)
165 170
 
166
-    logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, status=True).order_by('-created_at')
171
+    logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, member_id=member_id, status=True).order_by('-created_at')
167 172
     count = logs.count()
168 173
     logs, left = pagination(logs, page, num)
169 174
 
@@ -208,10 +213,11 @@ def admin_user_results(request):
208 213
 @logit
209 214
 def admin_point_user_unbind(request):
210 215
     user_id = request.POST.get('user_id', '')
216
+    member_id = request.POST.get('member_id', '')
211 217
     active = int(request.POST.get('active', 0))
212 218
 
213 219
     try:
214
-        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
220
+        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True)
215 221
     except IsolationPointUserInfo.DoesNotExist:
216 222
         return response()
217 223
 
@@ -235,11 +241,12 @@ def admin_point_user_unbind(request):
235 241
 @logit
236 242
 def admin_point_user_remark(request):
237 243
     user_id = request.POST.get('user_id', '')
244
+    member_id = request.POST.get('member_id', '')
238 245
     remark = request.POST.get('remark', '')
239 246
 
240 247
     # 存放历史备注记录
241 248
     try:
242
-        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
249
+        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True)
243 250
     except IsolationPointUserInfo.DoesNotExist:
244 251
         return response()
245 252
 
@@ -253,11 +260,12 @@ def admin_point_user_remark(request):
253 260
 @logit
254 261
 def admin_point_user_temperature_history(request):
255 262
     user_id = request.POST.get('user_id', '')
263
+    member_id = request.POST.get('member_id', '')
256 264
     point_id = request.POST.get('point_id', '')
257 265
     page = request.POST.get('page', 1)
258 266
     num = request.POST.get('num', 20)
259 267
 
260
-    logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, status=True)
268
+    logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, member_id=member_id, status=True)
261 269
     count = logs.count()
262 270
     logs, left = pagination(logs, page, num)
263 271
 

+ 7 - 1
equipment/admin.py

@@ -5,7 +5,7 @@ from django_admin import ReadOnlyModelAdmin
5 5
 
6 6
 from equipment.models import (AepThermometerMeasureLogInfo, AntigenMeasureLogInfo, IsolationPointFieldPoolInfo,
7 7
                               IsolationPointInfo, IsolationPointUserInfo, ThermometerEquipmentInfo,
8
-                              ThermometerMeasureLogInfo)
8
+                              ThermometerMeasureLogInfo, FamilyMemberInfo)
9 9
 
10 10
 
11 11
 class IsolationPointFieldPoolInfoAdmin(admin.ModelAdmin):
@@ -20,6 +20,10 @@ class IsolationPointUserInfoAdmin(admin.ModelAdmin):
20 20
     list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'chg_sta', 'temperature', 'last_submit_at', 'leave_at', 'status', 'created_at', 'updated_at')
21 21
 
22 22
 
23
+class FamilyMemberInfoAdmin(admin.ModelAdmin):
24
+    list_display = ('member_id', 'user_id', 'identity_card_number', 'identity_card_name', 'relation', 'status', 'created_at', 'updated_at')
25
+
26
+
23 27
 class ThermometerEquipmentInfoAdmin(admin.ModelAdmin):
24 28
     list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'ipui_pk', 'status', 'created_at', 'updated_at')
25 29
     list_filter = ('point_id', 'status')
@@ -45,3 +49,5 @@ admin.site.register(ThermometerEquipmentInfo, ThermometerEquipmentInfoAdmin)
45 49
 admin.site.register(ThermometerMeasureLogInfo, ThermometerMeasureLogInfoAdmin)
46 50
 admin.site.register(AepThermometerMeasureLogInfo, AepThermometerMeasureLogInfoAdmin)
47 51
 admin.site.register(AntigenMeasureLogInfo, AntigenMeasureLogInfoAdmin)
52
+admin.site.register(FamilyMemberInfo, FamilyMemberInfoAdmin)
53
+

+ 42 - 0
equipment/migrations/0032_auto_20221202_1415.py

@@ -0,0 +1,42 @@
1
+# Generated by Django 3.2.16 on 2022-12-02 06:15
2
+
3
+from django.db import migrations, models
4
+import shortuuidfield.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('equipment', '0031_auto_20221128_1653'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='FamilyMemberInfo',
16
+            fields=[
17
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
19
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
20
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
21
+                ('member_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='家庭成员唯一标识', max_length=22, null=True, unique=True)),
22
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
23
+                ('identity_card_number', models.CharField(blank=True, help_text='身份证号', max_length=32, null=True, verbose_name='identity_card_number')),
24
+                ('identity_card_name', models.CharField(blank=True, help_text='身份证姓名', max_length=32, null=True, verbose_name='identity_card_name')),
25
+                ('relation', models.CharField(choices=[('parent', '父母'), ('child', '子女'), ('spouse', '配偶')], db_index=True, default='child', help_text='家庭关系', max_length=32, verbose_name='relative')),
26
+            ],
27
+            options={
28
+                'verbose_name': '家庭成员信息',
29
+                'verbose_name_plural': '家庭成员信息',
30
+            },
31
+        ),
32
+        migrations.AddField(
33
+            model_name='isolationpointuserinfo',
34
+            name='member_id',
35
+            field=models.CharField(blank=True, db_index=True, help_text='家庭成员唯一标识', max_length=32, null=True, verbose_name='member_id'),
36
+        ),
37
+        migrations.AddField(
38
+            model_name='thermometermeasureloginfo',
39
+            name='member_id',
40
+            field=models.CharField(blank=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='member_id'),
41
+        ),
42
+    ]

+ 30 - 0
equipment/models.py

@@ -112,6 +112,34 @@ class IsolationPointInfo(BaseModelMixin):
112 112
             'qrcode_url': qrcode_url,
113 113
         }
114 114
 
115
+class FamilyMemberInfo(BaseModelMixin):
116
+    RELATION_TUPLE = (
117
+        ('parent', '父母'),
118
+        ('child', '子女'),
119
+        ('spouse', '配偶'),
120
+    )
121
+    member_id = ShortUUIDField(_('member_id'), max_length=32, blank=True, null=True, help_text='家庭成员唯一标识', db_index=True, unique=True)
122
+    user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True)
123
+    identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')
124
+    identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')
125
+    relation = models.CharField(_('relative'), choices=RELATION_TUPLE, default='child', max_length=32, help_text='家庭关系', db_index=True)
126
+
127
+    class Meta:
128
+        verbose_name = _('家庭成员信息')
129
+        verbose_name_plural = _('家庭成员信息')
130
+
131
+    def __unicode__(self):
132
+        return '%d' % self.pk
133
+    
134
+    @property
135
+    def data(self):
136
+        return {
137
+            'member_id': self.member_id,
138
+            'user_id': self.user_id,
139
+            'identity_card_number': self.identity_card_number,
140
+            'identity_card_name': self.identity_card_name,
141
+            'relation': self.relation,
142
+        }
115 143
 
116 144
 class IsolationPointUserInfo(BaseModelMixin):
117 145
     HAS_NOT_UPLOAD = '未上报'
@@ -134,6 +162,7 @@ class IsolationPointUserInfo(BaseModelMixin):
134 162
     point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
135 163
 
136 164
     user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True)
165
+    member_id = models.CharField(_('member_id'), max_length=32, blank=True, null=True, help_text='家庭成员唯一标识', db_index=True)
137 166
 
138 167
     fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段信息')
139 168
 
@@ -313,6 +342,7 @@ class ThermometerMeasureLogInfo(BaseModelMixin):
313 342
     point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
314 343
 
315 344
     user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识')
345
+    member_id = models.CharField(_('member_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识')
316 346
 
317 347
     macid = models.CharField(_('macid'), max_length=32, blank=True, null=True, help_text='设备号')
318 348
     sn = models.CharField(_('sn'), max_length=32, blank=True, null=True, help_text='序列号')